package com.shujia.scala

object Demo13Fun3 {
  def main(args: Array[String]): Unit = {

    /**
      *
      * 以函数作为返回值
      *
      */

    def fun1(): String => Int = {

      //参数为String返回值为Int类型的函数
      def f(str: String): Int = {
        str.toInt
      }

      //以函数作为返回值
      return f
    }


    //调用fun1返回值一个函数
    //fun2相当于f的引用
    val fun2: String => Int = fun1()

    val i: Int = fun2("100")

    println(i)


    //链式调用
    val j: Int = fun1()("100")

    println(j)


    /**
      *
      * 偏应用函数
      *
      */
    def fun3(s: String)(str: String): Int = {

      val ss = s + str

      ss.toInt
    }

    val k: Int = fun3("10")("0")

    println(k)


    //可以先传第一个参数，后续参数可以多次使用
    val ff: String => Int = fun3("10")


    val c = ff("00")
    val d = ff("000")

    println(c)
    println(d)


  }
}
